【STM32 + HAL库】之 6

您所在的位置:网站首页 输入system administrator的键盘的pin 【STM32 + HAL库】之 6

【STM32 + HAL库】之 6

2024-06-12 18:44| 来源: 网络整理| 查看: 265

 目录

第一部分、GPIO 输入模式 要点

第二部分、CubeMX 配置        

第三部分、代码编写

第四部分、编译+烧录代码

本篇目标:

        通过 按键,点亮\关闭 LED灯,学会:

        ①、通过CubeMX,配置引脚的输入模式          ②、调用函数,读取引脚电平状态         ③、了解上、下拉电阻钳位的作用  

        不聊底层理论,5分钟干完!      

     

友情约定:本系列的前五篇,为了方便新手玩家熟悉CubeMX、Keil的使用,会详细地截图每一步CubeMX、Keil的操作,并做上标记。之后的篇章,仅截图主要步骤页面。希望新手玩家熟记本篇的基本操作。

第一部分、GPIO 输入模式 要点

          

重要概念:电平

        上篇,我们通过点亮LED灯,控制引脚输出高、低电平。 

        但是,还没有解释:电平。 

        常规通信的电信号有:电压(大小)、电压差(差分)、电平(高低)、电流(大小)等。  

        这里迅速地了解一下 电平 的概念。

        电平:逻辑电平,它的标准、分类,非常啰嗦,如有兴趣可读此文: 常见的逻辑电平

        下面整理几条STM32的电平要点,以供速食:

        ①:电平 = 逻辑电平 = TTL; (这里特指TTL,其它的不陈述,用啥再说啥)。

        ②:两种状态:高电平、低电平。

        ③:高电平 = 置1 = 3.3V;  (输入时高于2.0V、输出时高于2.4V,就判断为高电平) ;

        ④:低电平 = 置0 = 0V; (输入时低于1.2V、输出时低于0.8V,就判断为低电平);

        要注意一下,与STM32通信的一些设备,如RS485, 它的输出电平有可能是5V。

        STM32F4系列的引脚,绝大部分都是5V电平包容的,但是F1系列,引脚并不都是5V包容。一定要注意通信双方的电平差别、冲突、保护,别炸了芯片。

        

输入模式

        输入的电压信号,大抵有两类:

        电平输入:给引脚一个电压信号,信号经内部施密特触发器后,变成电平结果(0V、3.3V);

        模拟输入:给引脚一个电压信号,经ADC,将模拟信号(0~3.3V), 变成数字结果(0~4095);

        常用的F1、F4系列对于引脚输入模式的划分,有所区别。

        F1系列,输入模式包括:电平输入(浮空、上下拉)、模拟输入,即没有模拟模式。

        F4系列,输入模式仅指电平输入(浮空、上下拉);它有独立的模拟模式,用于ADC和DAC。

        约定:下面所述输入模式,特指:电平输入

        引脚在输入模式时,I/O端口位内部结构、走向,如下图:

        上图解读,只有一个重点:外部电压信号,经施密特触发器后,变成了高、低电平。

        看不懂也没毛关系,绝大部分的新手也是看不懂!路过就好,有一定积累后再回头看。

输入模式下的3种内部上下拉状态

        当把引脚配置为输入模式后,我们可以通过配置,把引脚配置为三种电平钳位状态:        

        ① 浮空输入:内部上、下拉电阻,都没打开,引脚电平悬空,电平状态由外部决定;

        ② 上拉输入:打开内部上拉电阻,引脚外部悬空时,引脚是高电平状态。

        ③ 下拉输入:打开内部下拉电阻,引脚外部悬空时,引脚是低电平状态。

        三者的差别,在于上、下拉电阻是否打开。

上下拉、浮空,  有啥意义?

        很多新手不明白上、下拉电阻的作用(下面简称:上、下拉)。

        上、下拉,是为了在闲时把电路钳定在一个固定的电平。

        芯片引脚内部的上、下拉,是一个很弱的上下拉,电阻值比较大,阻值大约50K。当外部有电平变化时,引脚电平会跟随变动。

        举一个例子,深化一下上、下拉的作用。

        下图,是一个按键的原理图:

        我们看第一个按键的电路,它的信号接入引脚:PA0。

        按图,设计预期是:  按键未按下--PA0保持低电平0V,  按键按下后--PA0是高电平3.3V。

        我们来一个疑问:

        当,按键未按下,而且在没有内外上、下拉的情况下(浮空),PA0的电平是0V还是3.3V?

        绝大部分的新手玩家会认为是:0V。错!

        答案是:不确定。有可能是0V, 也有可能是3.3V,而且可能是不断地随机变化。 

        我们需要切记一点:引脚在输入模式时,浮空状态下(引脚悬空),电平不确定。

        这种不确定的状态,按键就达不到设计预期效果了。             

        如何修改电路?

        方法1:在PA0端,增加外部电路,给它一个10K的下拉电阻,闲时钳位在0V;

        方法2:GPIO内部上、下拉,置低电平,闲时钳位在低电平0V。这种方法最简单。

        现在,我们大概明白芯片内部上下拉的作用和意义了。     

输入模式  常常应用于:

按键触发信号

输入模式 注意坑区:

电平的电压 main.c,即可在编辑区打开main.c文件 。

        main.c, 向下滚动至大约85行,找到while函数部分 。         

        我们在while尾部,添加按键的代码,包括电平状态读取、动作控制。   

        再次提醒:CubeMX生成的工程,用户代码,必须:写在配对的BEGIN与END注释行之间。

        否则,下次使用CubeMX重新生成时,配对注释行外的用户代码会被干掉。切记!

        添加代码,如下:

函数解释:       

        HAL_GPIO_ReadPin(引脚端口,引脚编号);  // 读取引脚电平状态

        参数:

        引脚端口:参数范围 GPIOA ~ GPIOH

        引脚编号:参数范围 GPIO_PIN_0 ~ GPIO_PIN_15 ;  注意:英文字母要大写

        返回值:

        当引脚电平为低(0V), 返回:0,即枚举值的:GPIO_PIN_RESET

        当引脚电平为高(3.3V), 返回:1,即枚举值的:GPIO_PIN_SET

第四部分、编译+烧录代码

步骤一、编译代码

        点击工具栏 "Bulid" 按钮,对工程进行编译。

        编译过程,底部信息栏输出编译过程相关信息。

        编译完成后,会报告汇总有多少个错误、警告。

        当出现:0 errors字样,即为编译通过,无语法等错误。Warning警告的数量不影响。

        技巧1:当有错误时,向上滚动信息栏,找到第一个error描述行,双击可跳转到需要修改处。

        注意1:每次编译,会自动删除旧axf文件,必须 0 errors,才能生成新的axf烧录文件。

步骤二、烧录代码

        当上一步编译、修改至 0 Error后,单击菜单栏中的 “Load” 按钮,开始烧录代码。

        注意1:如果工程还没进行过仿真器的参数设置,需要设置一次仿真器参数。

        参考文章:【STM32 + HAL库】之 4 --- 设置仿真器CMSIS-DAP参数、烧录代码_cubemx可以烧录程序吗-CSDN博客

​       

        当烧录完成后,信息栏输出如下提示:

    

        至此,我们的按键状态读取,已完成。

        复习一下重点:

        ①、CubeMX配置 输入模式;

        ②、通过函数 HAL_GPIO_ReadPin( )  读取引脚电平状态;

        ③、上、下拉作用;

        如有某些不详尽、错误的地方,欢迎留言指正,按需更新细节。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3